package com.caregiver.watch.business.user.dao;

import com.caregiver.watch.business.user.model.po.UserReminder;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.time.LocalDateTime;
import java.util.List;

/**
 * @Description: 用户提醒通知Dao
 * @Author 疆戟
 * @Date 2025/8/23 15:36
 * @Version 1.0
 */
@Mapper
public interface UserReminderDao {

    /**
     * 根据用户ID查询提醒列表
     * @param userId 用户ID
     * @return 提醒列表
     */
    List<UserReminder> selectByUserId(@Param("userId") Long userId);

    /**
     * 添加用户提醒
     * @param reminder 提醒信息
     * @return 添加结果
     */
    int addUserReminder(UserReminder reminder);

    /**
     * 更新用户提醒
     * @param reminder 提醒信息
     * @return 更新结果
     */
    int updateUserReminder(UserReminder reminder);

    /**
     * 删除用户提醒
     * @param id 提醒ID
     * @return 删除结果
     */
    int deleteUserReminder(@Param("id") Long id, @Param("userId") Long userId);

    /**
     * 查询在指定时间范围内需要触发的提醒
     * @param currentTime 当前时间
     * @return 需要触发的提醒列表
     */
    List<UserReminder> queryActiveReminders(@Param("userId") Long userId,
                                             @Param("currentTime") LocalDateTime currentTime,
                                             @Param("repeatDays") Integer repeatDays);

    /**
     * 更新提醒的启用状态
     * @param id 提醒ID
     * @param userId 用户ID
     * @param isEnabled 是否启用
     * @return 更新记录数
     */
    int updateEnabledStatus(@Param("id") Long id, @Param("userId") Long userId, @Param("isEnabled") Integer isEnabled);

    /**
     * 软删除提醒
     * @param id 提醒ID
     * @return 删除记录数
     */
    int softDelete(@Param("id") Long id);

    /**
     * 获取提醒详情
     * @param id 提醒ID
     * @param userId 用户ID
     * @return 提醒详情
     */
    UserReminder queryUserReminderById(@Param("id") Long id, @Param("userId") Long userId);
}
